package main

import (
	"fmt"
	"reflect"
)

// 定义学生结构体
type Student struct {
	Name string
	Age  int
}

func testRefect2(i interface{}) {
	// 调用TypeOf函数,返回reflect.Type类型的数据
	reType := reflect.TypeOf(i)
	fmt.Println(reType) //main.Student
	// 调用ValueOf函数,返回reflect.Value类型数据
	reValue := reflect.ValueOf(i)
	fmt.Println(reValue) //{二狗 18}
	// reValue转成空接口
	a := reValue.Interface()
	student, flag := a.(Student)
	if flag { // 断言成功的话
		fmt.Printf("姓名:%v, 年龄:%v", student.Name, student.Age) //姓名:二狗, 年龄:18
	}
}
func main() {
	student := Student{
		Name: "二狗",
		Age:  18,
	}
	testRefect2(student)
}
